﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Data.Entity.Validation;
using System.Diagnostics;
using System.Web.UI.WebControls;
using System.Net.Mail;

namespace PetShopService
{
    public class PedidoServico
    {

        UsuarioServicos usuarioServicos = new UsuarioServicos();
        //Guarda e Recupera DA SESSION o Usuário LOGADO
        public List<ProdutoCarrinho> produtosCarrinho{
            get{
                if (HttpContext.Current.Session["PRODUTOS_CARRINHO"] == null)
                    return null;
                return (List<ProdutoCarrinho>)HttpContext.Current.Session["PRODUTOS_CARRINHO"];
            }
            set
            {
                HttpContext.Current.Session["PRODUTOS_CARRINHO"] = value;
            }
        }

        public List<ProdutoCarrinho> produtosCompra
        {
            get
            {
                if (HttpContext.Current.Session["PRODUTOS_COMPRA"] == null)
                    return null;
                return (List<ProdutoCarrinho>)HttpContext.Current.Session["PRODUTOS_COMPRA"];
            }
            set
            {
                HttpContext.Current.Session["PRODUTOS_COMPRA"] = value;
            }
        }

        BancoEntities banco = new BancoEntities();

        public void SalvarPedido()
        {
            try
            {
                Pedido oPedido = new Pedido();
                oPedido.DataPedido = DateTime.Now;
                oPedido.idUsuario = usuarioServicos.usuarioLogado.idUusario;
                decimal totalPedido = 0;
                List<ItensPedidos> itensPedidos = new List<ItensPedidos>();

                foreach (ProdutoCarrinho produto in produtosCarrinho){
                    ItensPedidos itemPedido = new ItensPedidos();
                    Produto oProduto = banco.Produto.SingleOrDefault(p => p.idProduto == produto.idProduto);
                    oProduto.Saldo = oProduto.Saldo - produto.quantidade;
                    banco.SaveChanges();
                    if (oProduto.Saldo < oProduto.SaldoMinimo) {
                        MailMessage mail = new MailMessage("you@yourcompany.com", "adm@adm.com");
                        SmtpClient client = new SmtpClient();
                        client.Port = 25;
                        client.DeliveryMethod = SmtpDeliveryMethod.Network;
                        client.UseDefaultCredentials = false;
                        client.Host = "smtp.google.com";
                        mail.Subject = "Saldo minimo do produto "+oProduto.Nome;
                        mail.Body = "O produto "+ oProduto.Nome + " está com o saldo " + oProduto.Saldo + " e o saldo mínimo é " + oProduto.SaldoMinimo;
                        //client.Send(mail);
                    }
                    itemPedido.idProduto = produto.idProduto;
                    itemPedido.Preco = produto.preco;
                    itemPedido.Quantidade = produto.quantidade;
                    itemPedido.Pedido = oPedido;
                    itensPedidos.Add(itemPedido);
                    totalPedido += itemPedido.Preco * itemPedido.Quantidade;
                }
                
                oPedido.valorTotal = totalPedido;
                oPedido.ItensPedidos = itensPedidos;
                banco.Pedido.Add(oPedido);
                banco.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                    }
                }
            }

        }

        public List<Pedido> RetornaPedidosDoCliente(int idCliente){
            return banco.Pedido.Where(p => p.idUsuario == idCliente).ToList();
        }

        public List<ItensPedidos> RetornaItensDoPedido(int idPedido) {
            return banco.ItensPedidos.Where(p => p.idPedido == idPedido).ToList();
        }

    }
}
